home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 23 / Amiga Format AFCD23 (Feb 1998, Issue 107).iso / +look_here_1st!+ / reader_requests / alienbreed3d2 / level1 / betterthanlife5.0 < prev    next >
Text File  |  1997-11-28  |  45KB  |  3,066 lines

  1.  
  2.  
  3.  
  4.  
  5. maxscrdiv EQU 8
  6. max3ddiv EQU 5
  7.  
  8. xpos EQU 0    ;l
  9. zpos EQU 4    ;l
  10. zsinval EQU 8    ;w
  11. zcosval EQU 10    ;w
  12. ztox EQU 12    ;l
  13. xsinval EQU 16    ;w
  14. xcosval EQU 18    ;w
  15. xspd EQU 20    ;w
  16. zspd EQU 22    ;w
  17. mapx EQU 24    ;b
  18. mapz EQU 25    ;b
  19. whichtile EQU 26 ;b
  20. xofflight EQU 28    ;w
  21. zofflight EQU 30    ;w
  22. offlight EQU 32        ;w
  23. zlinestore EQU 34
  24. zlinedir EQU 38
  25. zposdir EQU 40
  26. zposstore EQU 42
  27. xdiststore EQU 44
  28. xdistdir EQU 46
  29. zwallfound EQU 48
  30.  
  31. xlinestore EQU 50
  32. xlinedir EQU 54
  33. xposdir EQU 56
  34. xposstore EQU 58
  35. zdiststore EQU 60
  36. zdistdir EQU 62
  37. xwallfound EQU 64
  38.  
  39.  
  40. midoffset EQU 104*4*40
  41.  
  42.  SECTION Scrn,CODE_C
  43.  
  44. OpenLib         equ -552        ; Offset for OpenLibrary.
  45. CloseLib        equ -414        ; Offset for CloseLibrary.
  46.  
  47. vhposr        equ $006    
  48. vhposrl        equ $007 
  49. bltcon0        equ $40 
  50. bltcon1        equ $42
  51. bltcpt        equ $48
  52. bltbpt        equ $4c
  53. bltapt        equ $50
  54. spr0ctl        equ $142
  55. spr1ctl        equ $14a
  56. spr2ctl        equ $152
  57. spr3ctl        equ $15a
  58. spr4ctl        equ $162
  59. spr5ctl        equ $16a
  60. spr6ctl        equ $172
  61. spr7ctl        equ $17a
  62. spr0pos        equ $140
  63. spr1pos        equ $148
  64. spr2pos        equ $150
  65. spr3pos        equ $158
  66. spr4pos        equ $160
  67. spr5pos        equ $168
  68. spr6pos        equ $170
  69. spr7pos        equ $178
  70. bltdpt         equ $54
  71. bltafwm        equ $44
  72. bltalwm        equ $46
  73. bltsize         equ $58
  74. bltcmod         equ $60
  75. bltbmod         equ $62
  76. bltamod         equ $64
  77. bltdmod         equ $66
  78. diwstart        equ $8e         ; Screen hardware registers.
  79. diwstop         equ $90
  80. ddfstart        equ $92
  81. ddfstop         equ $94
  82. bplcon0         equ $100
  83. bplcon1         equ $102
  84. col0            equ $180
  85. col1            equ $182
  86. col2        equ $184
  87. col3        equ $186
  88. col4        equ $188
  89. col5        equ $18a
  90. col6        equ $18c
  91. col7        equ $18e
  92. col8            equ $190
  93. col9            equ $192
  94. col10           equ $194
  95. dmacon        equ $96
  96. dmaconr        equ $002
  97. intenar        equ $01c
  98. intena        equ $09a
  99. intreq        equ $09c
  100. intreqr        equ $01e
  101. intreqrl    equ $01f
  102. bpl1pth         equ $e0
  103. bpl1ptl         equ $e2
  104. bpl2pth        equ $e4
  105. bpl2ptl        equ $e6
  106. bpl3pth        equ $e8
  107. bpl3ptl        equ $ea
  108. bpl4pth        equ $ec
  109. bpl4ptl        equ $ee
  110. bpl5pth        equ $f0
  111. bpl5ptl        equ $f2
  112. bpl6pth        equ $f4
  113. bpl6ptl        equ $f6
  114. bpl7pth        equ $f8
  115. bpl7ptl        equ $fa
  116.  
  117. ** This waits for the blitter to finish before allowing program
  118. ** execution to continue.
  119.  
  120. WB MACRO
  121. \@bf:
  122.  btst #6,dmaconr(a6)
  123.  bne.s \@bf
  124.  ENDM
  125.  
  126. *Another version for when d6 <> dff000
  127.  
  128. WBSLOW MACRO
  129. \@bf:
  130.  btst #6,$dff000+dmaconr
  131.  bne.s \@bf
  132.  ENDM
  133.  
  134.  
  135. **
  136.  
  137.  include "macros.i"
  138.  include "ab3:source/defs.i"
  139.  
  140.  move.w (a0),option
  141.  
  142.  jmp stuff
  143. endstuff:
  144.  
  145.  move.l #$dff000,a6    ; NB V. IMPORTANT: A6=CUSTOM BASE
  146.  move.w #$87c0,dmacon(a6)
  147.  move.w #$0020,dmacon(a6)
  148.  move.w intenar(a6),saveinters
  149.  move.w #$7fff,intena(a6)
  150.  move.w #$00ff,$dff09e
  151.  
  152. *** Put myself in supervisor mode
  153.  
  154.  move.l #blag,$80
  155.  trap #0
  156. ; move.l $6c,d0
  157. ; move.l #blag,$6c
  158. ; move.w #$8010,intreq(a6)
  159.  
  160.  rts
  161.  
  162. saveit: ds.l 10
  163.  
  164.  
  165. blag:
  166. ; move.w #$10,intreq(a6)
  167. ; move.l d0,$6c
  168. ; move.w #$7fff,intena(a6)
  169.  
  170.  move.l $6c,saveit
  171.  move.l #Chan0inter,$6c
  172.  
  173.  move.l #empty,pos1
  174.  move.l #empty,pos2
  175.  move.l #emptyend,Samp0end
  176.  move.l #emptyend,Samp1end
  177.  
  178.  move.l #Panel,d0
  179.  move.w d0,p1l
  180.  swap d0
  181.  move.w d0,p1h
  182.  move.l #Panel+64*24,d0
  183.  move.w d0,p2l
  184.  swap d0
  185.  move.w d0,p2h
  186.  move.l #Panel+64*24*2,d0
  187.  move.w d0,p3l
  188.  swap d0
  189.  move.w d0,p3h
  190.  move.l #Panel+64*24*3,d0
  191.  move.w d0,p4l
  192.  swap d0
  193.  move.w d0,p4h
  194.  
  195.  move.l #FacePlace,d0
  196.  move.w d0,f1l
  197.  swap d0
  198.  move.w d0,f1h
  199.  move.l #FacePlace+32*24,d0
  200.  move.w d0,f2l
  201.  swap d0
  202.  move.w d0,f2h
  203.  move.l #FacePlace+32*24*2,d0
  204.  move.w d0,f3l
  205.  swap d0
  206.  move.w d0,f3h
  207.  move.l #FacePlace+32*24*3,d0
  208.  move.w d0,f4l
  209.  swap d0
  210.  move.w d0,f4h
  211.  move.l #FacePlace+32*24*4,d0
  212.  move.w d0,f5l
  213.  swap d0
  214.  move.w d0,f5h
  215.  
  216.  move.l #PanelCop,d0
  217.  move.w d0,pcl1
  218.  move.w d0,pcl2
  219.  swap d0
  220.  move.w d0,pch1
  221.  move.w d0,pch2
  222.  
  223.  move.l #bigfield,d0
  224.  move.w d0,ocl
  225.  swap d0
  226.  move.w d0,och
  227.  
  228.  bset.b #1,$bfe001
  229.  
  230.  move.l #bigfield,$dff080    ; Point the copper at our copperlist.
  231.  move.l #$dff000,a6    ; a6 points at the first custom chip register.
  232.  move.w #$00ff,$dff09e
  233.  
  234.  move.w #0,d0
  235.  
  236.  move.l #scrn,d0
  237.  move.w d0,pl1l
  238.  swap d0
  239.  move.w d0,pl1h
  240.  
  241.  move.l #scrn+40,d0
  242.  move.w d0,pl2l
  243.  swap d0
  244.  move.w d0,pl2h
  245.  
  246.  move.l #scrn+80,d0
  247.  move.w d0,pl3l
  248.  swap d0
  249.  move.w d0,pl3h
  250.  
  251.  move.l #scrn+120,d0
  252.  move.w d0,pl4l
  253.  swap d0
  254.  move.w d0,pl4h
  255.  
  256.  move.l #scrn+160,d0
  257.  move.w d0,pl5l
  258.  swap d0
  259.  move.w d0,pl5h
  260.  
  261.  move.l #scrn+200,d0
  262.  move.w d0,pl6l
  263.  swap d0
  264.  move.w d0,pl6h
  265.  
  266.  move.l #scrn+240,d0
  267.  move.w d0,pl7l
  268.  swap d0
  269.  move.w d0,pl7h
  270.  
  271.  move.l #colbars,a0
  272.  move.l #colbars2,a2
  273.  move.w #81,d0
  274.  move.l #0,d6
  275.  move.w #0,d3
  276.  move.w #$2bdf,startwait
  277.  move.w #$2d01,endwait
  278. fillcop
  279.  move.w #$180,d1
  280.  
  281.  move.l a0,a1
  282.  move.l a2,a3
  283.  move.w #$10c,(a1)+
  284.  move.w #$10c,(a3)+
  285.  move.w d3,(a1)+
  286.  move.w d3,(a3)+
  287.  eor.w #$8000,d3
  288.  
  289.  move.w #$106,(a1)+
  290.  move.w #$106,(a3)+
  291.  move.w #$2c40,d5
  292.  or.w d3,d5
  293.  move.w d5,(a1)+
  294.  move.w d5,(a3)+
  295.  bsr do32
  296.  
  297.  move.w #$106,(a1)+
  298.  move.w #$106,(a3)+
  299.  move.w #$4c40,d5
  300.  or.w d3,d5
  301.  move.w d5,(a1)+
  302.  move.w d5,(a3)+
  303.  bsr do32
  304.  
  305.  move.w #$106,(a1)+
  306.  move.w #$106,(a3)+
  307.  move.w #$6c40,d5
  308.  or.w d3,d5
  309.  move.w d5,(a1)+
  310.  move.w d5,(a3)+
  311.  bsr do32
  312.  
  313. **********************************
  314.  
  315.  cmp.b #'s',option
  316.  beq.s smallscrn
  317.  
  318.  move.w startwait,(a1)+
  319.  move.w #$fffe,(a1)+
  320.  move.w endwait,(a1)+
  321.  move.w #$ff00,(a1)+
  322.  move.w startwait,(a3)+
  323.  move.w #$fffe,(a3)+
  324.  move.w endwait,(a3)+
  325.  move.w #$ff00,(a3)+
  326.  
  327.  add.w #$300,startwait
  328.  add.w #$300,endwait
  329.  
  330. smallscrn: 
  331. **********************************
  332.  
  333.  adda.w #104*4,a0
  334.  adda.w #104*4,a2
  335.  
  336.  dbra d0,fillcop
  337.  
  338. **********************************
  339.  cmp.b #'s',option
  340.  beq smallnotlarge
  341.  move.w #$38,fetchstart
  342.  move.w #$b8,fetchstop
  343.  move.w #$2c81,winstart
  344.  move.w #$2cc1,winstop
  345.  move.w #-40,modulo
  346.  move.w #-40,modulo+4
  347.  
  348.  move.l #scrn+40,a0
  349.  move.l #scrn+160,a1
  350.  move.l #scrn+280,a2
  351.  move.l #scrntab,a3
  352.  move.w #319,d7    ; counter
  353.  move.w #0,d1    ; xpos
  354. plotscrnloop:
  355.  move.b (a3)+,d0
  356.  move.w d1,d2
  357.  asr.w #3,d2
  358.  move.b d1,d3
  359.  not.b d3
  360.  bclr.b d3,-40(a0,d2.w)
  361.  bclr.b d3,(a0,d2.w)
  362.  bclr.b d3,40(a0,d2.w)
  363.  bclr.b d3,-40(a1,d2.w)
  364.  bclr.b d3,(a1,d2.w)
  365.  bclr.b d3,40(a1,d2.w)
  366.  bclr.b d3,-40(a2,d2.w)
  367.  btst #0,d0
  368.  beq.s nobp1
  369.  bset.b d3,-40(a0,d2.w)
  370. nobp1:
  371.  btst #1,d0
  372.  beq.s nobp2
  373.  bset.b d3,(a0,d2.w)
  374. nobp2:
  375.  btst #2,d0
  376.  beq.s nobp3
  377.  bset.b d3,40(a0,d2.w)
  378. nobp3:
  379.  btst #3,d0
  380.  beq.s nobp4
  381.  bset.b d3,-40(a1,d2.w)
  382. nobp4:
  383.  btst #4,d0
  384.  beq.s nobp5
  385.  bset.b d3,(a1,d2.w)
  386. nobp5:
  387.  btst #5,d0
  388.  beq.s nobp6
  389.  bset.b d3,40(a1,d2.w)
  390. nobp6:
  391.  btst #6,d0
  392.  beq.s nobp7
  393.  bset.b d3,-40(a2,d2.w)
  394. nobp7:
  395.  
  396.  addq #1,d1
  397.  
  398.  dbra d7,plotscrnloop
  399.  
  400. smallnotlarge:
  401.  
  402. **********************************
  403.  
  404. ****************************
  405.  jsr INITPLAYER
  406. ; bsr initobjpos
  407. ****************************
  408.  
  409.  move.l #null,$dff0a0
  410.  move.w #100,$dff0a4
  411.  move.w #443,$dff0a6
  412.  move.w #63,$dff0a8
  413.  
  414.  move.l #null2,$dff0b0
  415.  move.w #100,$dff0b4
  416.  move.w #443,$dff0b6
  417.  move.w #63,$dff0b8
  418.  
  419.  move.l #null4,$dff0c0
  420.  move.w #100,$dff0c4
  421.  move.w #443,$dff0c6
  422.  move.w #63,$dff0c8
  423.  
  424.  move.l #null3,$dff0d0
  425.  move.w #100,$dff0d4
  426.  move.w #443,$dff0d6
  427.  move.w #63,$dff0d8
  428.  
  429.  move.l #tab+256,a1
  430.  move.w #63,d7
  431. outerlop
  432.  move.l #tab,a0
  433.  move.w #255,d6
  434. scaledownlop:
  435.  move.b (a0)+,d0
  436.  ext.w d0
  437.  ext.l d0
  438.  muls d7,d0
  439.  asr.l #6,d0
  440.  move.b d0,(a1)+
  441.  dbra d6,scaledownlop
  442.  subq #1,d7
  443.  bgt.s outerlop
  444.  
  445.  move.l #$dff000,a6
  446.  
  447.  move.w #$c010,intena(a6)
  448.  
  449.  move.w #$f,dmacon(a6)
  450.  move.w #$820f,dmacon(a6)
  451.  
  452.  bsr FullEnergy
  453.  move.b #1,GunDamage
  454.  move.w #3,GunNoise
  455.  
  456. lop: 
  457.  
  458.  move.l #$dff000,a6
  459.  
  460. waitfortop:
  461.  btst.b #0,intreqrl(a6)
  462.  beq waitfortop
  463.  move.w #$1,intreq(a6)
  464.  
  465.  
  466.  move.l drawpt,d0
  467.  move.l olddrawpt,drawpt
  468.  move.l d0,olddrawpt
  469.  move.l d0,$dff084
  470.  move.l drawpt,a3
  471.  adda.w #10,a3
  472.  move.l a3,frompt
  473.  add.l #104*4*40,a3
  474.  move.l a3,midpt
  475. ******************************************
  476.  bsr PlaceFace
  477.  bsr EnergyBar
  478.  jsr objmoveanim
  479. ******************************************
  480.  
  481.  move.l #SineTable,a0
  482.  
  483.  move.w angspd,d1
  484.  move.w angpos,d0
  485.  
  486.  btst #7,$bfe001
  487.  sne d6
  488.  
  489.  tst.b d6
  490.  seq clicked
  491.  move.b fire,d7
  492.  and.b d7,clicked
  493.  
  494.  move.b d6,fire
  495.  bsr turnleftright
  496.  
  497.  move.w (a0,d0.w),d6
  498.  adda.w #2048,a0
  499.  move.w (a0,d0.w),d7
  500.  
  501.  move.w d6,sinval
  502.  move.w d7,cosval
  503.  
  504.  move.l xspdval,d6
  505.  move.l zspdval,d7
  506.  
  507.  move.w xoff,oldxoff
  508.  move.w zoff,oldzoff
  509.  
  510.  
  511.  neg.l d6
  512.  ble.s nobug1
  513.  asr.l #1,d6
  514.  add.l #1,d6
  515.  bra.s bug1
  516. nobug1
  517.  asr.l #1,d6
  518. bug1:
  519.  
  520. ; beq.s goinnowhere
  521. ; blt.s goinfor
  522. ; cmp.l #4*65536,d6
  523. ; ble.s goinnowhere
  524. ; move.l #4*65536,d6
  525. ;goinfor:
  526. ; cmp.l #-4*65536,d6
  527. ; bge.s goinnowhere
  528. ; move.l #-4*65536,d6
  529. ;goinnowhere:
  530.  
  531.  neg.l d7
  532.  ble.s nobug2
  533.  asr.l #1,d7
  534.  add.l #1,d7
  535.  bra.s bug2
  536. nobug2
  537.  asr.l #1,d7
  538. bug2: 
  539.  
  540. ; beq.s goinnowhere2
  541. ; blt.s goinfor2
  542. ; cmp.l #4*65536,d7
  543. ; ble.s goinnowhere2
  544. ; move.l #4*65536,d7
  545. ;goinfor2:
  546. ; cmp.l #-4*65536,d7
  547. ; bge.s goinnowhere2
  548. ; move.l #-4*65536,d7
  549. ;goinnowhere2:
  550.  
  551.  move.w sinval,d1
  552.  move.w cosval,d2
  553.  ext.l d1
  554.  ext.l d2
  555.  asl.l #5,d1
  556.  asl.l #5,d2
  557.  
  558.  tst.b fire
  559.  bra.s nomovelrposs
  560.  
  561.  btst #1,$d(a6)
  562.  sne d3
  563.  beq.s notleft2
  564.  add.l d2,d6
  565.  sub.l d1,d7
  566. notleft2
  567.  
  568.  btst #1,$c(a6)
  569.  sne d4
  570.  beq.s notright2
  571.  sub.l d2,d6
  572.  add.l d1,d7
  573. notright2
  574.  
  575. nomovelrposs:
  576.  
  577.  btst #0,$dff00c
  578.  sne d5
  579.  eor.b d4,d5
  580.  beq.s notup
  581.  add.l d1,d6
  582.  add.l d2,d7
  583. notup:
  584.  
  585.  btst #0,$dff00d
  586.  sne d5
  587.  eor.b d3,d5
  588.  beq.s notdown
  589.  sub.l d1,d6
  590.  sub.l d2,d7
  591. notdown:
  592.  
  593.  add.l d6,xspdval
  594.  add.l d7,zspdval
  595.  
  596.  move.l xspdval,d6
  597.  move.l zspdval,d7
  598.  add.l d6,xoff
  599.  add.l d7,zoff
  600.  
  601. *************************************
  602.  jsr putinbackdrop
  603. *************************************
  604.  
  605.  move.w xoff,newx
  606.  move.w zoff,newz
  607.  move.w oldxoff,oldx
  608.  move.w oldzoff,oldz
  609.  move.l xspdval,xdiff
  610.  move.l zspdval,zdiff
  611.  move.l Roompt,objroom
  612.  bsr MoveObject
  613.  move.l objroom,Roompt
  614.  move.w newx,xoff
  615.  move.w newz,zoff
  616.  
  617.  move.l Roompt,a0
  618.  addq #2,a0
  619.  move.l (a0)+,tyoff
  620.  addq #2,a0
  621.  
  622. findneg:
  623.  tst.w (a0)+
  624.  bge.s findneg
  625. findneg2:
  626.  tst.w (a0)+
  627.  bge.s findneg2
  628. findneg3:
  629.  tst.w (a0)+
  630.  bge.s findneg3
  631.  
  632. ; move.l (a0),a0        ; jump to viewpoint list
  633.  * A0 is pointing at a pointer to list of points to rotate
  634.  move.l (a0)+,PointsToRotatePtr
  635.  move.l a0,ListOfGraphRooms
  636.  
  637. *****************************************************
  638.  
  639.  move.l tyoff,d0
  640.  move.l yoff,d1
  641.  move.l yvel,d2
  642.  add.l d2,d1
  643.  add.l #1024,d2
  644.  sub.l d1,d0
  645.  bgt.s shouldfall
  646.  move.l d0,d2
  647.  cmp.l #-2048,d2
  648.  bge.s shouldfall
  649.  move.l #-2048,d2
  650. shouldfall:
  651.  move.l d2,yvel
  652.  move.l d1,yoff
  653.  
  654.  
  655.  move.l yoff,d0
  656.  asr.l #8,d0
  657.  move.w d0,d1
  658.  and.w #63,d1
  659.  move.w d1,wallyoff
  660.  and.b #%11111100,d0
  661.  move.w d0,flooryoff
  662.  
  663.  move.w xoff,d6
  664.  move.w d6,d3
  665.  asr.w #1,d3
  666.  add.w d3,d6
  667.  asr.w #1,d6
  668.  move.w d6,xoff34
  669.  
  670.  move.w zoff,d6
  671.  move.w d6,d3
  672.  asr.w #1,d3
  673.  add.w d3,d6
  674.  asr.w #1,d6
  675.  move.w d6,zoff34
  676.  
  677.  bsr RotateLevelPts
  678.  bsr RotateObjectPts
  679.  
  680.  move.w #0,scaleval
  681.  
  682.  move.w #0,leftclip
  683.  move.w #96,rightclip
  684.  
  685. * Subroom loop
  686.  
  687.  move.l ListOfGraphRooms,a0
  688.  
  689. subroomloop:
  690.  move.l (a0)+,d7
  691.  blt jumpoutofrooms
  692.  bsr setlrclip
  693. ; move.w leftclip,d0
  694. ; cmp.w rightclip,d0
  695. ; bge subroomloop
  696.  move.l a0,-(a7)
  697.  move.l d7,a0
  698.  
  699.  move.w (a0)+,d0
  700.  move.w d0,currzone
  701.  move.l #ZoneAdds,a1
  702.  move.l (a1,d0.w*4),a1
  703.  move.w 6(a1),ZoneBright
  704.  
  705. polyloop:
  706.  move.w (a0)+,d0
  707.  blt jumpoutofloop
  708.  beq.s itsawall
  709.  cmp.w #3,d0
  710.  beq.s itsasetclip
  711.  cmp.w #4,d0
  712.  beq.s itsanobject
  713.  cmp.w #5,d0
  714.  bne.s itsafloor
  715. itsanarc:
  716.  jsr CurveDraw
  717.  bra polyloop
  718.  
  719. itsanobject:
  720.  jsr ObjDraw
  721.  bra polyloop
  722.  
  723. itsafloor:
  724. * 1,2 = floor/roof
  725.  jsr itsafloordraw
  726.  bra polyloop
  727. itsasetclip:
  728.  bsr setlrclip
  729.  bra polyloop
  730. itsawall:
  731.  bsr itsawalldraw
  732.  bra.s polyloop
  733.  
  734. jumpoutofloop:
  735.  
  736.  jsr ObjDraw
  737.  
  738.  move.l (a7)+,a0
  739.  bra subroomloop
  740.  
  741. jumpoutofrooms:
  742.  
  743.  
  744.  move.l #$dff000,a6
  745.  
  746. ; move.w #$300,col0(a6)
  747.  
  748.  btst #6,$bfe001
  749.  beq end
  750.  
  751.  tst.w Energy
  752.  ble end
  753.  
  754.  bra lop
  755.  
  756. ***************************************************************************
  757. ***************************************************************************
  758. ****************** End of Main Loop here ********************************** 
  759. ***************************************************************************
  760. ***************************************************************************
  761.  
  762. RotateLevelPts:
  763.  
  764.  move.w sinval,d5
  765.  move.w cosval,d6
  766.  
  767.  move.l PointsToRotatePtr,a0
  768.  move.l #Points,a3
  769.  move.l #Rotated,a1
  770.  move.l #OnScreen,a2
  771. pointrotlop:
  772.  move.w (a0)+,d7
  773.  blt.s outofpointrot
  774.  
  775.  move.w (a3,d7*4),d0
  776.  sub.w xoff,d0
  777.  move.w 2(a3,d7*4),d1
  778.  sub.w zoff,d1
  779.  move.w d0,d2
  780.  muls d6,d2
  781.  move.w d1,d3
  782.  muls d5,d3
  783.  sub.l d3,d2
  784.  add.l d2,d2
  785.  swap d2
  786.  ext.l d2
  787.  asl.l #7,d2
  788.  move.l d2,(a1,d7*8)
  789.  
  790.  muls d5,d0
  791.  muls d6,d1
  792.  add.l d0,d1
  793.  asl.l #2,d1
  794.  swap d1
  795.  move.l d1,4(a1,d7*8)
  796.  
  797.  tst.w d1
  798.  bgt.s ptnotbehind
  799.  move.w #-1,d2
  800.  bra putin
  801. ptnotbehind:
  802.  
  803.  divs d1,d2
  804.  add.w #47,d2
  805. putin:
  806.  move.w d2,(a2,d7*2)
  807.  
  808.  bra pointrotlop
  809. outofpointrot:
  810.  
  811.  rts
  812.  
  813. RotateObjectPts:
  814.  
  815.  move.w sinval,d5
  816.  move.w cosval,d6
  817.  
  818.  move.l #ObjectPoints,a0
  819.  move.w NumObjectPoints,d7
  820.  move.l #ObjRotated,a1
  821. objpointrotlop:
  822.  
  823.  move.w (a0)+,d0
  824.  sub.w xoff,d0
  825.  move.w (a0)+,d1
  826.  sub.w zoff,d1
  827.  move.w d0,d2
  828.  muls d6,d2
  829.  move.w d1,d3
  830.  muls d5,d3
  831.  sub.l d3,d2
  832.  add.l d2,d2
  833.  swap d2
  834.  move.w d2,(a1)+
  835.  ext.l d2
  836.  asl.l #7,d2
  837.  
  838.  muls d5,d0
  839.  muls d6,d1
  840.  add.l d0,d1
  841.  asl.l #2,d1
  842.  swap d1
  843.  move.w d1,(a1)+
  844.  move.l d2,(a1)+
  845.  
  846.  dbra d7,objpointrotlop
  847.  
  848.  rts
  849.  
  850. FaceToPlace: dc.w 0
  851.  
  852. Cheese:
  853.  dc.w 4,25
  854.  
  855. FacesList:
  856.  
  857.  dc.w 0,4*4
  858.  dc.w 2,2*4
  859.  dc.w 0,2*4
  860.  dc.w 3,2*4
  861.  dc.w 0,2*4
  862.  dc.w 2,3*4
  863.  dc.w 0,2*4
  864.  dc.w 3,3*4
  865.  dc.w 0,5*4
  866.  dc.w 1,2*4
  867.  dc.w 0,2*4
  868.  dc.w 1,2*4
  869.  dc.w 0,2*4
  870.  dc.w 1,2*4
  871.  dc.w 0,2*4
  872.  dc.w 2,3*4
  873.  dc.w 0,1*4
  874.  dc.w 3,3*4
  875.  dc.w 0,1*4
  876.  dc.w 2,3*4
  877.  dc.w 0,1*4
  878.  
  879. EndOfFacesList:
  880.  
  881. FacesPtr:
  882.  dc.l FacesList
  883. FacesCounter:
  884.  dc.w 0
  885. Expression:
  886.  dc.w 0
  887.  
  888. PlaceFace:
  889.  
  890.  move.w FacesCounter,d0
  891.  subq #1,d0
  892.  bgt.s NoNewFace
  893.  
  894.  move.l FacesPtr,a0
  895.  
  896.  move.w 2(a0),d0
  897.  move.w (a0),Expression
  898.  addq #4,a0
  899.  cmp.l #EndOfFacesList,a0
  900.  blt.s NotFirstFace
  901.  
  902.  move.l #FacesList,a0
  903.  
  904. NotFirstFace
  905.  move.l a0,FacesPtr
  906.  
  907. NoNewFace:
  908.  
  909.  move.w d0,FacesCounter
  910.  
  911.  Move.w FaceToPlace,d0
  912.  muls #5,d0
  913.  add.w Expression,d0
  914.  move.l #FacePlace+10,a0
  915.  move.l #Faces,a1
  916.  muls #(4*32*5),d0
  917.  adda.w d0,a1
  918.  move.w #4,d0
  919.  move.w #24,d1
  920.  
  921.  move.w #4,d3
  922. bitplaneloop:
  923.  move.w #31,d2
  924. PlaceFaceToPlaceInFacePlaceLoop:
  925.  move.l (a1),(a0)
  926.  adda.w d0,a1
  927.  adda.w d1,a0
  928.  dbra d2,PlaceFaceToPlaceInFacePlaceLoop
  929.  dbra d3,bitplaneloop
  930.  
  931.  rts
  932.  
  933. Energy:
  934.  dc.w 191
  935. OldEnergy:
  936.  dc.w 191
  937.  
  938. FullEnergy:
  939.  move.w #191,Energy
  940.  move.w #191,OldEnergy
  941.  move.l #Panel+41*24,a0
  942.  move.w #6*6-1,d0
  943. fillbar:
  944.  move.l #$fefefefe,(a0)+
  945.  dbra d0,fillbar
  946.  rts
  947.  
  948. EnergyBar:
  949.  
  950.  move.w Energy,d0
  951.  move.w #192,d1
  952.  sub.w d0,d1
  953.  ext.l d1
  954.  divs #48,d1
  955.  move.w d1,FaceToPlace
  956.  cmp.w OldEnergy,d0
  957.  bne.s gottochange
  958.  
  959. NoChange
  960.  rts
  961.  
  962. gottochange:
  963.   
  964.  blt LessEnergy
  965.  cmp.w #191,Energy
  966.  blt.s NotMax
  967.  move.w #191,Energy
  968. NotMax:
  969.  
  970.  move.w Energy,d0
  971.  move.w OldEnergy,d2
  972.  sub.w d0,d2
  973.  beq.s NoChange
  974.  neg.w d2
  975.  
  976.  move.w OldEnergy,d3
  977.  
  978.  move.l #Panel+41*24,a0
  979. EnergyRise:
  980.  move.w d3,d0
  981.  move.b d0,d1
  982.  not.b d1
  983.  and.b #7,d1
  984.  beq.s noplot
  985.  asr.w #3,d0
  986.  lea (a0,d0.w),a1
  987.  bset.b d1,(a1)
  988.  bset.b d1,24(a1)
  989.  bset.b d1,24*2(a1)
  990.  bset.b d1,24*3(a1)
  991.  bset.b d1,24*4(a1)
  992.  bset.b d1,24*5(a1)
  993. noplot:
  994.  addq #1,d3
  995.  subq #1,d2
  996.  bgt.s EnergyRise
  997.  
  998.  move.w Energy,OldEnergy
  999.  
  1000.  rts 
  1001.  
  1002.  
  1003. LessEnergy: 
  1004.  move.w OldEnergy,d2
  1005.  sub.w d0,d2
  1006.  
  1007.  move.w OldEnergy,d3
  1008.  
  1009.  move.l #Panel+41*24,a0
  1010. EnergyDrain:
  1011.  move.w d3,d0
  1012.  move.b d0,d1
  1013.  not.b d1
  1014.  asr.w #3,d0
  1015.  lea (a0,d0.w),a1
  1016.  bclr.b d1,(a1)
  1017.  bclr.b d1,24(a1)
  1018.  bclr.b d1,24*2(a1)
  1019.  bclr.b d1,24*3(a1)
  1020.  bclr.b d1,24*4(a1)
  1021.  bclr.b d1,24*5(a1)
  1022.  subq #1,d3
  1023.  subq #1,d2
  1024.  bgt.s EnergyDrain
  1025.  
  1026.  move.w Energy,OldEnergy
  1027.  
  1028.  rts 
  1029.  
  1030. end:
  1031.  jmp closeeverything 
  1032.  
  1033. do32:
  1034.  move.w #31,d7
  1035.  move.w #$180,d1
  1036. across:
  1037.  move.w d1,(a1)+
  1038.  move.w d1,(a3)+
  1039.  move.w #0,(a1)+
  1040.  move.w #0,(a3)+
  1041.  add.w #2,d1
  1042.  dbra d7,across
  1043.  rts
  1044.  
  1045.  
  1046.  
  1047. *************************************
  1048. * Set left and right clip values
  1049. *************************************
  1050.  
  1051. xspdval: dc.l 0
  1052. zspdval: dc.l 0
  1053.  
  1054. setlrclip:
  1055.  move.l #OnScreen,a1
  1056.  move.l #Rotated,a2
  1057.  
  1058.  move.w (a0)+,d0
  1059.  bge.s notdefaultleft
  1060.  move.w #0,leftclip
  1061.  bra leftnotoktoclip
  1062. notdefaultleft:
  1063.  
  1064.  move.w 6(a2,d0*8),d1    ; left z val
  1065.  bgt.s leftclipinfront
  1066.  
  1067.  move.w (a0),d0
  1068.  tst.w 6(a2,d0*8)
  1069.  bgt.s leftnotoktoclip
  1070.  move.w #95,leftclip
  1071.  move.w #0,rightclip
  1072.  addq #2,a0
  1073.  rts
  1074.  
  1075. leftclipinfront:
  1076.  move.w (a1,d0*2),d1    ; left x on screen
  1077.  cmp.w leftclip(pc),d1
  1078.  ble.s leftnotoktoclip
  1079.  cmp.w #95,d1
  1080.  ble.s leftclipnotoffright
  1081.  move.w #95,d1
  1082. leftclipnotoffright:
  1083.  move.w d1,leftclip
  1084. leftnotoktoclip:
  1085.  
  1086.  move.w (a0)+,d0
  1087.  bge.s notdefaultright
  1088.  move.w #96,rightclip
  1089.  bra rightnotoktoclip
  1090. notdefaultright:
  1091.  move.w 6(a2,d0*8),d1    ; right z val
  1092.  ble.s rightnotoktoclip
  1093.  
  1094. rightclipinfront:
  1095.  move.w (a1,d0*2),d1    ; right x on screen
  1096.  cmp.w rightclip(pc),d1
  1097.  bge.s rightnotoktoclip
  1098.  tst.w d1
  1099.  bge.s rightclipnotoffleft
  1100.  moveq #0,d1
  1101. rightclipnotoffleft:
  1102.  addq #1,d1
  1103.  move.w d1,rightclip
  1104. rightnotoktoclip:
  1105.  
  1106.  rts
  1107.  
  1108. leftclip2: dc.w 0
  1109. rightclip2: dc.w 0
  1110. ZoneBright: dc.w 0
  1111.  
  1112. npolys: dc.w 0
  1113.  
  1114. fire: dc.w 0
  1115.  
  1116. turnleftright:
  1117.  move.w d1,d2
  1118.  neg.w d2
  1119. ; cmp.w #128,d2
  1120. ; ble.s okslow1
  1121. ; move.w #128,d2
  1122. ;okslow1
  1123. ; cmp.w #-128,d2
  1124. ; bge.s okslow2
  1125. ; move.w #-128,d2
  1126. ;okslow2
  1127.  
  1128. ; tst.b fire
  1129. ; beq.s noturnposs
  1130.  
  1131.  btst #1,$d(a6)
  1132.  sne d3
  1133.  beq.s notleft
  1134.  move.w #80,d2
  1135.  tst.w d1
  1136.  bge.s notleft
  1137.  moveq #0,d1
  1138. notleft
  1139.  
  1140.  btst #1,$c(a6)
  1141.  sne d4
  1142.  beq.s notright
  1143.  move.w #-80,d2
  1144.  tst.w d1
  1145.  ble.s notright
  1146.  moveq #0,d1
  1147. notright
  1148.  
  1149. noturnposs:
  1150.  
  1151.  add.w d2,d1
  1152.  
  1153.  move.w d1,angspd
  1154.  add.w d1,d0
  1155.  and.w #8191,d0
  1156.  move.w d0,angpos
  1157.  rts
  1158.  
  1159. *****************************************************
  1160. ********** WALL STUFF *******************************
  1161.  
  1162.  include "AB3:source/wallroutine3"
  1163.  
  1164. *****************************************************
  1165.  
  1166.  include "ab3:source/ObjectMove"
  1167.  
  1168. pastdata:
  1169. ***********************************
  1170. * This routine animates brightnesses.
  1171.  
  1172.  
  1173. liftpt: dc.l liftanimtab
  1174.  
  1175. brightpt:
  1176.  dc.l brightanimtab
  1177.  
  1178. liftanim:
  1179.  rts
  1180.  
  1181. ******************************
  1182.  include "ab3:level1/Anims"
  1183. ******************************
  1184.  
  1185. rotanimpt: dc.w 0
  1186. xradd: dc.w 5
  1187. yradd: dc.w 8
  1188. xrpos: dc.w 320
  1189. yrpos: dc.w 320
  1190.  
  1191. rotanim:
  1192.  rts
  1193.  
  1194. option:
  1195.  dc.w 0
  1196.  
  1197. ******************************************
  1198. * floor polygon
  1199.  
  1200. itsafloordraw:
  1201.  
  1202. * If D0 =1 then its a floor otherwise (=2) it's
  1203. * a roof.
  1204.  
  1205.  move.w #0,above
  1206.  move.w (a0)+,d6    ; ypos of poly
  1207.  
  1208.  move.w leftclip(pc),d7
  1209.  cmp.w rightclip(pc),d7
  1210.  bge.s dontdrawreturn
  1211.  
  1212.  sub.w flooryoff,d6
  1213.  bgt.s below
  1214.  blt.s aboveplayer
  1215. dontdrawreturn:
  1216.  move.w (a0)+,d6    ; sides-1
  1217.  add.w d6,d6
  1218.  add.w d6,a0
  1219.  add.w #4+6,a0
  1220.  rts
  1221. aboveplayer:
  1222.  cmp.w #2,d0
  1223.  bne.s dontdrawreturn
  1224.  move.w #1,d0
  1225.  move.w d0,above
  1226.  neg.w d6
  1227. below:
  1228.  cmp.w #1,d0
  1229.  bne.s dontdrawreturn
  1230.  move.w d6,distaddr
  1231.  muls #256,d6
  1232.  move.l d6,ypos
  1233.  divs #40,d6        ; zpos of bottom
  1234.             ; visible line
  1235.  move.w d6,minz
  1236.  
  1237.  move.w #80,top
  1238.  move.w #-1,bottom
  1239.  move.w #0,drawit
  1240.  move.l #Rotated,a1
  1241.  move.l #OnScreen,a2
  1242.  move.w (a0)+,d7    ; no of sides
  1243. sideloop:
  1244.  move.w minz,d6
  1245.  move.w (a0)+,d1
  1246.  move.w (a0),d3
  1247.  move.w 6(a1,d1*8),d4    ;first z
  1248.  cmp.w d6,d4
  1249.  bgt firstinfront
  1250.  move.w 6(a1,d3*8),d5    ; sec z
  1251.  cmp.w d6,d5
  1252.  ble bothbehind
  1253. ** line must be on left and partially behind.
  1254.  sub.w d5,d4
  1255.  move.l (a1,d1*8),d0
  1256.  sub.l (a1,d3*8),d0
  1257.  sub.w d5,d6
  1258.  divs d4,d0
  1259.  muls d6,d0    ; new x coord
  1260.  
  1261.  add.l (a1,d3*8),d0
  1262.  move.w minz,d4
  1263.  move.w (a2,d3*2),d2
  1264.  divs d4,d0
  1265.  add.w #47,d0
  1266.  move.l ypos,d3
  1267.  divs d5,d3
  1268.  move.w #40,d1 
  1269.  bra lineclipped
  1270.  
  1271. firstinfront:
  1272.  move.w 6(a1,d3*8),d5    ; sec z
  1273.  cmp.w d6,d5
  1274.  bgt bothinfront
  1275. ** line must be on right and partially behind.
  1276.  sub.w d4,d5    ; dz
  1277.  move.l (a1,d3*8),d2
  1278.  sub.l (a1,d1*8),d2    ; dx
  1279.  sub.w d4,d6
  1280.  divs d5,d2
  1281.  muls d6,d2    ; new x coord
  1282.  add.l (a1,d1*8),d2
  1283.  move.w minz,d5
  1284.  move.w (a2,d1*2),d0
  1285.  divs d5,d2
  1286.  add.w #47,d2
  1287.  move.l ypos,d1
  1288.  divs d4,d1
  1289.  move.w #40,d3 
  1290.  bra lineclipped
  1291.  
  1292. bothinfront:
  1293.  
  1294. * Also, usefully enough, both are on-screen
  1295. * so no bottom clipping is needed.
  1296.  
  1297.  move.w (a2,d1*2),d0    ; first x
  1298.  move.w (a2,d3*2),d2    ; second x
  1299.  move.l ypos,d1
  1300.  move.l d1,d3
  1301.  divs d4,d1        ; first y
  1302.  divs d5,d3        ; second y
  1303. lineclipped:
  1304.  move.l #rightsidetab,a3
  1305.  cmp.w d1,d3
  1306.  beq lineflat
  1307.  bgt lineonright
  1308.  move.l #leftsidetab,a3
  1309.  exg d1,d3
  1310.  exg d0,d2
  1311.  st drawit
  1312.  
  1313.  lea (a3,d1*2),a3
  1314.  
  1315.  cmp.w top(pc),d1
  1316.  bge.s .nonewtop
  1317.  move.w d1,top
  1318. .nonewtop:
  1319.  cmp.w bottom(pc),d3
  1320.  ble.s .nonewbot
  1321.  move.w d3,bottom
  1322. .nonewbot:
  1323.  
  1324.  sub.w d1,d3    ; dy
  1325.  sub.w d0,d2    ; dx
  1326.  
  1327.  blt .linegoingleft
  1328.  sub.w #1,d0
  1329.  moveq #0,d6
  1330.  sub.w d3,d2
  1331.  blt.s .noco
  1332. .makeco
  1333.  addq #1,d6
  1334.  sub.w d3,d2
  1335.  bge.s .makeco
  1336. .noco
  1337.  add.w d3,d2
  1338.  
  1339.  move.w d3,d4
  1340.  move.w d3,d5
  1341.  subq #1,d5
  1342.  move.w d6,d1
  1343.  addq #1,d1
  1344.  
  1345. .pixlopright:
  1346.  move.w d0,(a3)+
  1347.  sub.w d2,d4
  1348.  bge.s .nobigstep
  1349.  add.w d1,d0
  1350.  add.w d3,d4
  1351.  dbra d5,.pixlopright
  1352.  bra lineflat
  1353. .nobigstep
  1354.  add.w d6,d0
  1355.  dbra d5,.pixlopright
  1356.  bra lineflat
  1357.  
  1358. .linegoingleft:
  1359.  sub.w #1,d0
  1360.  neg.w d2
  1361.  moveq #0,d6
  1362.  sub.w d3,d2
  1363.  blt.s .nocol
  1364. .makecol
  1365.  addq #1,d6
  1366.  sub.w d3,d2
  1367.  bge.s .makecol
  1368. .nocol
  1369.  add.w d3,d2
  1370.  
  1371.  move.w d3,d4
  1372.  move.w d3,d5
  1373.  subq #1,d5
  1374.  move.w d6,d1
  1375.  addq #1,d1
  1376.  
  1377. .pixlopleft:
  1378.  sub.w d2,d4
  1379.  bge.s .nobigstepl
  1380.  sub.w d1,d0
  1381.  add.w d3,d4
  1382.  move.w d0,(a3)+
  1383.  dbra d5,.pixlopleft
  1384.  bra lineflat
  1385.  
  1386. .nobigstepl
  1387.  sub.w d6,d0
  1388.  move.w d0,(a3)+
  1389.  dbra d5,.pixlopleft
  1390.  bra lineflat
  1391.  
  1392. lineonright:
  1393.  
  1394.  st drawit
  1395.  
  1396.  lea (a3,d1*2),a3
  1397.  
  1398.  cmp.w top(pc),d1
  1399.  bge.s .nonewtop
  1400.  move.w d1,top
  1401. .nonewtop:
  1402.  cmp.w bottom(pc),d3
  1403.  ble.s .nonewbot
  1404.  move.w d3,bottom
  1405. .nonewbot:
  1406.  
  1407.  sub.w d1,d3    ; dy
  1408.  sub.w d0,d2    ; dx
  1409.  blt .linegoingleft
  1410.  addq #1,d0
  1411.  moveq #0,d6
  1412.  sub.w d3,d2
  1413.  blt.s .noco
  1414. .makeco
  1415.  addq #1,d6
  1416.  sub.w d3,d2
  1417.  bge.s .makeco
  1418. .noco
  1419.  add.w d3,d2
  1420.  
  1421.  move.w d3,d4
  1422.  move.w d3,d5
  1423.  subq #1,d5
  1424.  move.w d6,d1
  1425.  addq #1,d1
  1426.  
  1427. .pixlopright:
  1428.  sub.w d2,d4
  1429.  bge.s .nobigstep
  1430.  add.w d1,d0
  1431.  add.w d3,d4
  1432.  move.w d0,(a3)+
  1433.  dbra d5,.pixlopright
  1434.  bra lineflat
  1435.  
  1436. .nobigstep
  1437.  add.w d6,d0
  1438.  move.w d0,(a3)+
  1439.  dbra d5,.pixlopright
  1440.  bra lineflat
  1441.  
  1442. .linegoingleft:
  1443.  addq #1,d0
  1444.  neg.w d2
  1445.  moveq #0,d6
  1446.  sub.w d3,d2
  1447.  blt.s .nocol
  1448. .makecol
  1449.  addq #1,d6
  1450.  sub.w d3,d2
  1451.  bge.s .makecol
  1452. .nocol
  1453.  add.w d3,d2
  1454.  
  1455.  move.w d3,d4
  1456.  move.w d3,d5
  1457.  subq #1,d5
  1458.  move.w d6,d1
  1459.  addq #1,d1
  1460.  
  1461. .pixlopleft:
  1462.  move.w d0,(a3)+
  1463.  sub.w d2,d4
  1464.  bge.s .nobigstepl
  1465.  sub.w d1,d0
  1466.  add.w d3,d4
  1467.  dbra d5,.pixlopleft
  1468.  bra lineflat
  1469.  
  1470. .nobigstepl
  1471.  sub.w d6,d0
  1472.  dbra d5,.pixlopleft
  1473.  
  1474. lineflat:
  1475.  
  1476. bothbehind:
  1477.  dbra d7,sideloop
  1478.  
  1479. pastsides:
  1480.  
  1481.  addq #2,a0
  1482.  
  1483.  move.w #104*4,linedir
  1484.  move.l frompt,a6
  1485.  add.l #104*4*41,a6
  1486.  move.w (a0)+,scaleval
  1487.  move.w (a0)+,whichtile
  1488.  move.w (a0)+,d6
  1489.  add.w ZoneBright,d6
  1490.  move.w d6,lighttype
  1491.  move.w above(pc),d6
  1492.  beq groundfloor
  1493. * on ceiling:
  1494.  move.w #-104*4,linedir
  1495.  suba.w #104*4,a6
  1496. groundfloor:
  1497.  
  1498.  move.w xoff,d6
  1499.  move.w zoff,d7
  1500.  move.w scaleval,d3
  1501.  move.l scaleprogfrom(pc,d3.w*4),scaleprog
  1502.  tst.w d3
  1503.  beq.s .samescale
  1504.  bgt.s .scaledown
  1505.  neg.w d3
  1506.  asr.l d3,d7
  1507.  asr.l d3,d6
  1508.  bra.s .samescale
  1509. .scaledown:
  1510.  asl.l d3,d6
  1511.  asl.l d3,d7
  1512. .samescale
  1513.  asl.w #8,d7
  1514.  move.w d6,sxoff
  1515.  move.w d7,szoff
  1516.  bra pastscale 
  1517.  
  1518.  asr.l #3,d1
  1519.  asr.l #3,d2
  1520.  asr.l #2,d1
  1521.  asr.l #2,d2
  1522.  asr.l #1,d1
  1523.  asr.l #1,d2
  1524. scaleprogfrom
  1525.  nop
  1526.  nop
  1527.  asl.l #1,d1
  1528.  asl.l #1,d2
  1529.  asl.l #2,d1
  1530.  asl.l #2,d2
  1531.  asl.l #3,d1
  1532.  asl.l #3,d2
  1533.  
  1534. drawit: dc.w 0
  1535. top: dc.w 0
  1536. bottom: dc.w 0
  1537. ypos: dc.l 0
  1538. nfloors: dc.w 0
  1539. lighttype: dc.w 0
  1540. above: dc.w 0 
  1541. linedir: dc.w 0
  1542. distaddr: dc.w 0
  1543.  
  1544. minz: dc.w 0
  1545. leftsidetab:
  1546.  ds.w 80
  1547. rightsidetab:
  1548.  ds.w 80
  1549. leftsideclip:
  1550.  ds.w 80
  1551. rightsideclip:
  1552.  ds.w 80
  1553.  
  1554. movespd: dc.w 0
  1555. largespd: dc.l 0
  1556.  
  1557. pastscale:
  1558.  
  1559.  tst.b drawit(pc)
  1560.  beq dontdrawfloor
  1561.  
  1562.  move.l a0,-(a7)
  1563.  
  1564.  move.l #leftsidetab,a4
  1565.  move.w top(pc),d1
  1566.  lea (a4,d1*2),a4
  1567.  move.l #dists,a2
  1568.  move.w distaddr,d0
  1569.  asl.w #5,d0
  1570.  adda.w d0,a2
  1571.  lea (a2,d1*2),a2
  1572.  move.w bottom(pc),d7
  1573.  sub.w d1,d7
  1574.  blt predontdrawfloor
  1575.  muls linedir,d1
  1576.  add.l d1,a6
  1577.  move.l #floorscalecols,a1
  1578. dofloor:
  1579.  move.w (a2)+,d0
  1580.  move.w leftclip(pc),d3
  1581.  move.w rightclip(pc),d4
  1582.  move.w rightsidetab-leftsidetab(a4),d2
  1583.  addq #1,d2
  1584.  cmp.w d3,d2
  1585.  ble.s nodrawline
  1586.  cmp.w d4,d2
  1587.  ble.s noclipright
  1588.  move.w d4,d2
  1589. noclipright:
  1590.  move.w (a4),d1
  1591.  cmp.w d4,d1
  1592.  bge.s nodrawline
  1593.  cmp.w d3,d1
  1594.  bge.s noclipleft
  1595.  move.w d3,d1
  1596. noclipleft:
  1597.  cmp.w d1,d2
  1598.  ble.s nodrawline
  1599.  
  1600.  move.w d1,leftedge
  1601.  move.w d2,rightedge
  1602.  
  1603.  move.l a6,a3
  1604.  movem.l d7/a2/a4,-(a7)
  1605. *****************************************
  1606. * Use Floorline for patterned floor, SimpleFloorLine for plain+fast.
  1607. ; cmp.b #'t',option+1
  1608. ; beq.s texturedfloor
  1609. ; bsr SimpleFloorLine
  1610. ; bra simplefloor
  1611. ;texturedfloor:
  1612.  bsr FloorLine
  1613. ;simplefloor:
  1614. *****************************************
  1615.  movem.l (a7)+,d7/a2/a4
  1616. nodrawline
  1617.  adda.w linedir(pc),a6
  1618.  addq #2,a4
  1619.  subq #1,d7
  1620.  bgt dofloor
  1621.  
  1622. predontdrawfloor
  1623.  move.l (a7)+,a0
  1624.  
  1625. dontdrawfloor:
  1626.  rts
  1627.  
  1628. dists:
  1629.  incbin "floordists"
  1630.  
  1631.  
  1632.  
  1633. ***************************
  1634. * Right then, time for the floor
  1635. * routine...
  1636. * For test purposes, give it
  1637. * a3 = point to screen
  1638. * d0= z distance away
  1639. * and sinval+cosval must be set up.
  1640. ***************************
  1641.  
  1642. leftedge: dc.w 0
  1643. rightedge: dc.w 0
  1644.  
  1645. SimpleFloorLine:
  1646.  
  1647.  move.w lighttype,d1
  1648.  move.w d0,d2
  1649.  asr.w #6,d2
  1650.  add.w d2,d1
  1651.  add.w #20,d1
  1652.  move.l simplefloorbright(pc,d1.w*4),a1
  1653.  bra pastsimplefloorbright
  1654.  dc.l floorscalecols
  1655.  dc.l floorscalecols
  1656.  dc.l floorscalecols
  1657.  dc.l floorscalecols
  1658.  dc.l floorscalecols
  1659.  dc.l floorscalecols
  1660.  dc.l floorscalecols
  1661.  dc.l floorscalecols
  1662.  dc.l floorscalecols
  1663.  dc.l floorscalecols
  1664.  dc.l floorscalecols
  1665. simplefloorbright:
  1666.  dc.l floorscalecols+8192*0
  1667.  dc.l floorscalecols+8192*1
  1668.  dc.l floorscalecols+8192*1
  1669.  dc.l floorscalecols+8192*2
  1670.  dc.l floorscalecols+8192*2
  1671.  dc.l floorscalecols+8192*3
  1672.  dc.l floorscalecols+8192*3
  1673.  dc.l floorscalecols+8192*4
  1674.  dc.l floorscalecols+8192*4
  1675.  dc.l floorscalecols+8192*5
  1676.  dc.l floorscalecols+8192*5
  1677.  dc.l floorscalecols+8192*6
  1678.  dc.l floorscalecols+8192*6
  1679.  dc.l floorscalecols+8192*7
  1680.  dc.l floorscalecols+8192*7
  1681.  dc.l floorscalecols+8192*8
  1682.  dc.l floorscalecols+8192*8
  1683.  dc.l floorscalecols+8192*9
  1684.  dc.l floorscalecols+8192*9
  1685.  dc.l floorscalecols+8192*10
  1686.  dc.l floorscalecols+8192*10
  1687.  dc.l floorscalecols+8192*11
  1688.  dc.l floorscalecols+8192*11
  1689.  dc.l floorscalecols+8192*12
  1690.  dc.l floorscalecols+8192*12
  1691.  dc.l floorscalecols+8192*12
  1692.  dc.l floorscalecols+8192*12
  1693.  dc.l floorscalecols+8192*12
  1694.  dc.l floorscalecols+8192*12
  1695.  dc.l floorscalecols+8192*12
  1696.  dc.l floorscalecols+8192*12
  1697.  dc.l floorscalecols+8192*12
  1698.  dc.l floorscalecols+8192*12
  1699.  dc.l floorscalecols+8192*12
  1700.  dc.l floorscalecols+8192*12
  1701.  dc.l floorscalecols+8192*12
  1702.  dc.l floorscalecols+8192*12
  1703.  dc.l floorscalecols+8192*12
  1704.  dc.l floorscalecols+8192*12
  1705.  dc.l floorscalecols+8192*12
  1706.  dc.l floorscalecols+8192*12
  1707.  dc.l floorscalecols+8192*12
  1708.  dc.l floorscalecols+8192*12
  1709.  dc.l floorscalecols+8192*12
  1710.  dc.l floorscalecols+8192*12
  1711.  dc.l floorscalecols+8192*12
  1712.  dc.l floorscalecols+8192*12
  1713.  dc.l floorscalecols+8192*12
  1714.  dc.l floorscalecols+8192*12
  1715.  dc.l floorscalecols+8192*12
  1716.  dc.l floorscalecols+8192*12
  1717.  dc.l floorscalecols+8192*12
  1718.  dc.l floorscalecols+8192*12
  1719.  dc.l floorscalecols+8192*12
  1720.  dc.l floorscalecols+8192*12
  1721.  dc.l floorscalecols+8192*12
  1722.  dc.l floorscalecols+8192*12
  1723.  dc.l floorscalecols+8192*12
  1724.  dc.l floorscalecols+8192*12
  1725.  dc.l floorscalecols+8192*12
  1726.  dc.l floorscalecols+8192*12
  1727.  dc.l floorscalecols+8192*12
  1728.  dc.l floorscalecols+8192*12
  1729.  dc.l floorscalecols+8192*12
  1730.  dc.l floorscalecols+8192*12
  1731.  dc.l floorscalecols+8192*12
  1732.  dc.l floorscalecols+8192*12
  1733.  dc.l floorscalecols+8192*12
  1734.  dc.l floorscalecols+8192*12
  1735.  dc.l floorscalecols+8192*12
  1736.  dc.l floorscalecols+8192*12
  1737.  dc.l floorscalecols+8192*12
  1738.  dc.l floorscalecols+8192*12
  1739.  dc.l floorscalecols+8192*12
  1740.  dc.l floorscalecols+8192*12
  1741.  dc.l floorscalecols+8192*12
  1742.  dc.l floorscalecols+8192*12
  1743.  dc.l floorscalecols+8192*12
  1744.  dc.l floorscalecols+8192*12
  1745.  dc.l floorscalecols+8192*12
  1746.  dc.l floorscalecols+8192*12
  1747.  dc.l floorscalecols+8192*12
  1748.  dc.l floorscalecols+8192*12
  1749.  dc.l floorscalecols+8192*12
  1750.  dc.l floorscalecols+8192*12
  1751.  dc.l floorscalecols+8192*12
  1752.  dc.l floorscalecols+8192*12
  1753.  dc.l floorscalecols+8192*12
  1754.  dc.l floorscalecols+8192*12
  1755.  dc.l floorscalecols+8192*12
  1756.  dc.l floorscalecols+8192*12
  1757.  dc.l floorscalecols+8192*12
  1758.  dc.l floorscalecols+8192*12
  1759.  dc.l floorscalecols+8192*12
  1760.  dc.l floorscalecols+8192*12
  1761.  dc.l floorscalecols+8192*12
  1762.  dc.l floorscalecols+8192*12
  1763.  dc.l floorscalecols+8192*12
  1764.  dc.l floorscalecols+8192*12
  1765.  dc.l floorscalecols+8192*12
  1766.  dc.l floorscalecols+8192*12
  1767.  dc.l floorscalecols+8192*12
  1768.  dc.l floorscalecols+8192*12
  1769.  dc.l floorscalecols+8192*12
  1770.  dc.l floorscalecols+8192*12
  1771.  dc.l floorscalecols+8192*12
  1772.  dc.l floorscalecols+8192*12
  1773.  dc.l floorscalecols+8192*12
  1774.  dc.l floorscalecols+8192*12
  1775.  dc.l floorscalecols+8192*12
  1776.  dc.l floorscalecols+8192*12
  1777.  dc.l floorscalecols+8192*12
  1778.  dc.l floorscalecols+8192*12
  1779.  dc.l floorscalecols+8192*12
  1780.  dc.l floorscalecols+8192*12
  1781.  dc.l floorscalecols+8192*12
  1782.  dc.l floorscalecols+8192*12
  1783.  dc.l floorscalecols+8192*12
  1784.  dc.l floorscalecols+8192*12
  1785.  
  1786. simplepals:
  1787.  dc.w $af
  1788.  dc.w $ff
  1789.  dc.w $ddd
  1790.  dc.w $8f0
  1791.  dc.w $ff0
  1792.  dc.w $0
  1793.  
  1794. pastsimplefloorbright:
  1795.  
  1796.  CACHE_OFF d2
  1797.  
  1798.  move.w whichtile,d1
  1799.  move.w d1,d0
  1800.  and.w #2,d0
  1801.  asr.w #6,d1
  1802.  or.w d1,d0
  1803.  move.w simplepals(pc,d0.w),d0
  1804.  
  1805.  move.w (a1,d0.w*2),d0; colour on this line
  1806.  move.w leftedge(pc),d1
  1807.  move.l #doacrossline,a1
  1808.  move.w rightedge(pc),d2
  1809.  sub.w d1,d2
  1810.  lea (a1,d1.w*4),a1
  1811.  move.w (a1,d2.w*4),d4
  1812.  move.w #$4e75,(a1,d2.w*4)
  1813.  
  1814.  jsr (a1)
  1815.  move.w d4,(a1,d2.w*4)
  1816.  
  1817.  CACHE_ON d2
  1818.  
  1819.  rts
  1820.  
  1821. storeit: dc.l 0
  1822.  
  1823. doacrossline:
  1824. val SET 0
  1825.  REPT 32
  1826.  move.w d0,val(a3)
  1827. val SET val+4
  1828.  ENDR
  1829. val SET val+4
  1830.  REPT 32
  1831.  move.w d0,val(a3)
  1832. val SET val+4
  1833.  ENDR
  1834. val SET val+4
  1835.  REPT 32
  1836.  move.w d0,val(a3)
  1837. val SET val+4
  1838.  ENDR
  1839.  rts
  1840.  
  1841.  
  1842. FloorLine:
  1843.  
  1844.  move.l #floortile,a0
  1845.  adda.w whichtile,a0
  1846.  move.w lighttype,d1
  1847.  
  1848.  move.w d0,d2
  1849.  asr.w #6,d2
  1850.  add.w d2,d1
  1851.  add.w #5,d1
  1852.  bge.s fixedbright
  1853.  moveq #0,d1
  1854. fixedbright:
  1855.  cmp.w #28,d1
  1856.  ble.s smallbright
  1857.  move.w #28,d1
  1858. smallbright:
  1859.  move.l floorbright(pc,d1*4),a1
  1860.  bra pastfloorbright
  1861.  
  1862. floorbright:
  1863.  dc.l floorscalecols+512*0
  1864.  dc.l floorscalecols+512*1
  1865.  dc.l floorscalecols+512*1
  1866.  dc.l floorscalecols+512*2
  1867.  dc.l floorscalecols+512*2
  1868.  
  1869.  dc.l floorscalecols+512*3
  1870.  dc.l floorscalecols+512*3
  1871.  dc.l floorscalecols+512*4
  1872.  dc.l floorscalecols+512*4
  1873.  dc.l floorscalecols+512*5
  1874.  
  1875.  dc.l floorscalecols+512*5
  1876.  dc.l floorscalecols+512*6
  1877.  dc.l floorscalecols+512*6
  1878.  dc.l floorscalecols+512*7
  1879.  dc.l floorscalecols+512*7
  1880.  
  1881.  dc.l floorscalecols+512*8
  1882.  dc.l floorscalecols+512*8
  1883.  dc.l floorscalecols+512*9
  1884.  dc.l floorscalecols+512*9
  1885.  dc.l floorscalecols+512*10
  1886.  
  1887.  dc.l floorscalecols+512*10
  1888.  dc.l floorscalecols+512*11
  1889.  dc.l floorscalecols+512*11
  1890.  dc.l floorscalecols+512*12
  1891.  dc.l floorscalecols+512*12
  1892.  
  1893.  dc.l floorscalecols+512*13
  1894.  dc.l floorscalecols+512*13
  1895.  dc.l floorscalecols+512*14
  1896.  dc.l floorscalecols+512*14
  1897.  
  1898. widthleft: dc.w 0
  1899. scaleval: dc.w 0
  1900. sxoff: dc.w 0
  1901. szoff: dc.w 0
  1902. xoff34: dc.w 0
  1903. zoff34: dc.w 0
  1904. scosval: dc.w 0
  1905. ssinval: dc.w 0
  1906.  
  1907. floorsetbright:
  1908.  move.l #walltiles,a0
  1909.  
  1910. pastfloorbright
  1911.  move.w d0,d1
  1912.  muls cosval(PC),d1    ; change in x across whole width
  1913.  move.w d0,d2
  1914.  muls sinval(PC),d2    ; change in z across whole width
  1915.  neg.l d2
  1916. scaleprog:
  1917.  asr.l #1,d1
  1918.  asr.l #1,d2
  1919.  
  1920.  move.l d1,d3 ;    z cos
  1921.  move.l d3,d6
  1922.  move.l d3,d5
  1923.  asr.l #1,d6
  1924.  add.l d6,d3
  1925. ; asr.l #1,d3 ; *3/4
  1926.  asr.l #1,d3
  1927.  
  1928.  move.l d2,d4    ; z sin
  1929.  move.l d4,d6
  1930.  asr.l #1,d6
  1931.  add.l d4,d6
  1932. ; asr.l #1,d6
  1933.  add.l d3,d4
  1934.  neg.l d4    ; start x
  1935.  
  1936.  asr.l #1,d6    ; zsin/2
  1937.  sub.l d6,d5    ; start z
  1938.  
  1939.  add.l d1,d1
  1940.  add.l d2,d2    
  1941.  move.w d4,startsmoothx
  1942.  move.w d5,startsmoothz
  1943.  
  1944.  swap d4
  1945.  asr.l #8,d5
  1946.  move.w szoff,d6
  1947.  add.w d6,d5
  1948.  move.w sxoff,d6
  1949.  add.w d6,d4
  1950.  and.w #63,d4
  1951.  and.w #63*256,d5
  1952.  move.b d4,d5
  1953.  ext.l d5
  1954.  and.b #63,d5
  1955.  lsl.w #2,d5    ; position in block
  1956.  
  1957.  asr.l #7,d1
  1958.  
  1959.  asr.l #7,d2
  1960.  move.w leftedge(pc),d6
  1961.  beq.s nomultleft
  1962.  
  1963.  move.l d1,d3
  1964.  asr.l #6,d3
  1965.  muls d6,d3
  1966.  asl.l #6,d3
  1967.  swap d3
  1968.  asl.w #2,d3
  1969.  add.b d3,d5
  1970.  
  1971.  move.l d2,d3
  1972.  asr.l #6,d3
  1973.  muls d6,d3
  1974.  asl.l #6,d3
  1975.  swap d3
  1976.  lsl.w #8,d3
  1977.  lsl.w #2,d3
  1978.  add.w d3,d5
  1979.  
  1980. nomultleft:
  1981.  
  1982.  move.w d1,a4
  1983.  move.w d2,a5
  1984.  asr.l #6,d2
  1985.  and.w #%1111110000000000,d2
  1986.  swap d1
  1987.  asl.w #2,d1
  1988.  
  1989. ***********************************
  1990.  asr.w #2,d1
  1991.  asr.w #2,d2
  1992.  add.w d1,d2
  1993.  move.w #%11111100111111,d1
  1994.  asr.w #2,d5
  1995.  and.w d1,d5
  1996.  swap d5
  1997.  move.w startsmoothz,d5
  1998.  swap d5
  1999.  swap d2
  2000.  move.w a5,d2
  2001.  swap d2
  2002.  
  2003. ***********************************
  2004.  
  2005.  move.w d6,a2
  2006.  move.l d2,d6
  2007.  add.w #256,d6
  2008.  
  2009.  moveq #0,d0
  2010.  
  2011.  tst.w a2
  2012.  beq startatleftedge
  2013.  
  2014.  move.w widthleft(pc),d4
  2015.  
  2016.  move.w rightedge(pc),d3
  2017.  
  2018.  cmp.w #31,a2
  2019.  bgt.s notinfirststrip
  2020.  lea (a3,a2.w*4),a3
  2021.  cmp.w #32,d3
  2022.  ble.s allinfirststrip
  2023.  move.w #32,d7
  2024.  sub.w a2,d7
  2025.  sub.w #32,d3
  2026.  bra intofirststrip
  2027.  
  2028. allinfirststrip
  2029.  sub.w a2,d3
  2030.  move.w d3,d7
  2031.  move.w #0,d4
  2032.  bra allintofirst
  2033.  
  2034. notinfirststrip:
  2035.  sub.w #32,a2
  2036.  sub.w #32,d3
  2037.  adda.w #33*4,a3
  2038.  cmp.w #31,a2
  2039.  bgt.s notstartinsec
  2040.  lea (a3,a2.w*4),a3
  2041.  cmp.w #32,d3
  2042.  ble.s allinsecstrip
  2043.  move.w #32,d7
  2044.  sub.w a2,d7
  2045.  sub.w #32,d3
  2046.  move.w d3,d4
  2047.  dbra d7,acrossscrn2
  2048.  
  2049. allinsecstrip
  2050.  sub.w a2,d3
  2051.  move.w d3,d7
  2052.  move.w #0,d4
  2053.  dbra d7,acrossscrn2
  2054.  rts
  2055.  
  2056. notstartinsec:
  2057.  sub.w #32,a2
  2058.  sub.w #32,d3
  2059.  adda.w #33*4,a3
  2060.  lea (a3,a2.w*4),a3
  2061.  cmp.w #32,d3
  2062.  ble.s allinthirdstrip
  2063.  move.w #32,d7
  2064.  sub.w a2,d7
  2065.  sub.w #32,d3
  2066.  move.w d3,d4
  2067.  dbra d7,acrossscrn3
  2068.  rts
  2069.  
  2070. allinthirdstrip
  2071.  sub.w a2,d3
  2072.  move.w d3,d7
  2073.  move.w #0,d4
  2074.  dbra d7,acrossscrn3
  2075.  rts
  2076.  
  2077. startatleftedge:
  2078.  
  2079.  move.w rightedge(pc),d3
  2080.  sub.w a2,d3
  2081.  
  2082.  move.w d3,d7
  2083.  cmp.w #32,d7
  2084.  ble.s .notoowide
  2085.  move.w #32,d7
  2086. .notoowide:
  2087.  sub.w d7,d3
  2088. intofirststrip:
  2089.  move.w d3,d4
  2090. allintofirst:
  2091.  
  2092.  move.w startsmoothx,d3
  2093.  dbra d7,acrossscrn
  2094.  rts
  2095.  
  2096. backbefore:
  2097.  and.w d1,d5
  2098.  move.b (a0,d5.w*4),d0
  2099.  move.w (a1,d0.w*2),(a3)
  2100.  addq #4,a3
  2101.  add.w a4,d3
  2102.  addx.l d6,d5
  2103.  dbcs d7,acrossscrn
  2104.  dbcc d7,backbefore
  2105.  bra.s past1
  2106.  
  2107. acrossscrn:
  2108.  and.w d1,d5
  2109.  move.b (a0,d5.w*4),d0
  2110.  move.w (a1,d0.w*2),(a3)
  2111.  addq #4,a3
  2112.  add.w a4,d3
  2113.  addx.l d2,d5
  2114.  dbcs d7,acrossscrn
  2115.  dbcc d7,backbefore
  2116. past1:
  2117.  
  2118.  move.w d4,d7
  2119.  bne.s .notdoneyet
  2120.  rts
  2121. .notdoneyet:
  2122.  
  2123.  cmp.w #32,d7
  2124.  ble.s .notoowide
  2125.  move.w #32,d7
  2126. .notoowide
  2127.  sub.w d7,d4  
  2128.  addq #4,a3
  2129.  
  2130.  dbra d7,acrossscrn2
  2131.  rts
  2132.  
  2133. backbefore2:
  2134.  and.w d1,d5
  2135.  move.b (a0,d5.w*4),d0
  2136.  move.w (a1,d0.w*2),(a3)
  2137.  addq #4,a3
  2138.  add.w a4,d3
  2139.  addx.l d6,d5
  2140.  dbcs d7,acrossscrn2
  2141.  dbcc d7,backbefore2
  2142.  bra.s past2
  2143.  
  2144. acrossscrn2:
  2145.  and.w d1,d5
  2146.  move.b (a0,d5.w*4),d0
  2147.  move.w (a1,d0.w*2),(a3)
  2148.  addq #4,a3
  2149.  add.w a4,d3
  2150.  addx.l d2,d5
  2151.  dbcs d7,acrossscrn2
  2152.  dbcc d7,backbefore2
  2153. past2:
  2154.   
  2155.  move.w d4,d7
  2156.  bne.s .notdoneyet
  2157.  rts
  2158. .notdoneyet:
  2159.  
  2160.  cmp.w #32,d7
  2161.  ble.s .notoowide
  2162.  move.w #32,d7
  2163. .notoowide
  2164.  sub.w d7,d4
  2165.  
  2166.  addq #4,a3
  2167.  dbra d7,acrossscrn3
  2168.  rts
  2169.  
  2170. backbefore3:
  2171.  and.w d1,d5
  2172.  move.b (a0,d5.w*4),d0
  2173.  move.w (a1,d0.w*2),(a3)
  2174.  addq #4,a3
  2175.  add.w a4,d3
  2176.  addx.l d6,d5
  2177.  dbcs d7,acrossscrn3
  2178.  dbcc d7,backbefore3
  2179.  rts
  2180.  
  2181. acrossscrn3:
  2182.  and.w d1,d5
  2183.  move.b (a0,d5.w*4),d0
  2184.  move.w (a1,d0.w*2),(a3)
  2185.  addq #4,a3
  2186.  add.w a4,d3
  2187.  addx.l d2,d5
  2188.  dbcs d7,acrossscrn3
  2189.  dbcc d7,backbefore3
  2190. past3:
  2191.  
  2192. timetodie:
  2193.  
  2194.  rts 
  2195.  
  2196. startsmoothx: dc.w 0
  2197. startsmoothz: dc.w 0
  2198.  
  2199. ********************************
  2200. *
  2201.  include "AB3:source/ObjDraw2"
  2202. *
  2203. ********************************
  2204.  
  2205. numframes:
  2206.  dc.w 0
  2207.  
  2208. Chan0inter:
  2209.  
  2210.  move.w #$0010,$dff000+intreq
  2211.  
  2212.  btst #7,$dff000+intreqrl
  2213.  bne.s newsampbitl
  2214.  
  2215. noneed:
  2216.  
  2217.  rte
  2218. newsampbitl:
  2219.  
  2220.  movem.l d0-d7/a0-a6,-(a7)
  2221.  move.w #$820f,$dff000+dmacon
  2222.  
  2223.  move.w #$80,$dff000+intreq
  2224.  
  2225.  move.l pos1,a0
  2226.  move.l pos2,a1
  2227.  
  2228.  move.l #tab,a2
  2229.  adda.w audpos1,a2
  2230.  
  2231.  move.l Aupt0,a3
  2232.  move.l a3,$dff0a0
  2233.  move.l Auback0,Aupt0
  2234.  move.l a3,Auback0
  2235.  
  2236.  move.l Auback0,a3
  2237.  
  2238.  moveq #0,d0
  2239.  moveq #0,d1
  2240.  moveq #0,d2
  2241.  moveq #0,d3
  2242.  moveq #0,d4
  2243.  moveq #0,d5
  2244.  move.w #49,d7
  2245. loop:
  2246.  move.l (a0)+,d0
  2247.  move.b (a1)+,d1
  2248.  move.b (a1)+,d2
  2249.  move.b (a1)+,d3
  2250.  move.b (a1)+,d4
  2251.  move.b (a2,d3.w),d5
  2252.  swap d5
  2253.  move.b (a2,d1.w),d5
  2254.  asl.l #8,d5
  2255.  move.b (a2,d2.w),d5
  2256.  swap d5
  2257.  move.b (a2,d4.w),d5
  2258.  add.l d5,d0
  2259.  move.l d0,(a3)+
  2260.  dbra d7,loop
  2261.  
  2262.  move.l pos1,a0
  2263.  move.l pos2,a1
  2264.  
  2265.  move.l Aupt1,a3
  2266.  move.l a3,$dff0b0
  2267.  move.l Auback1,Aupt1
  2268.  move.l a3,Auback1
  2269.  
  2270.  move.l #tab,a2
  2271.  adda.w audpos2,a2
  2272.  moveq #0,d0
  2273.  moveq #0,d1
  2274.  moveq #0,d2
  2275.  moveq #0,d3
  2276.  moveq #0,d4
  2277.  moveq #0,d5
  2278.  move.w #49,d7
  2279. loop2:
  2280.  move.l (a0)+,d0
  2281.  move.b (a1)+,d1
  2282.  move.b (a1)+,d2
  2283.  move.b (a1)+,d3
  2284.  move.b (a1)+,d4
  2285.  move.b (a2,d3.w),d5
  2286.  swap d5
  2287.  move.b (a2,d1.w),d5
  2288.  asl.l #8,d5
  2289.  move.b (a2,d2.w),d5
  2290.  swap d5
  2291.  move.b (a2,d4.w),d5
  2292.  add.l d5,d0
  2293.  move.l d0,(a3)+
  2294.  dbra d7,loop2
  2295.  
  2296.  cmp.l Samp0end,a0
  2297.  blt.s notoffendsamp1
  2298.  move.l #bass,a0
  2299.  move.l #bassend,Samp0end
  2300.  tst.b backbeat
  2301.  bne.s playbeat
  2302.  move.l #empty,a0
  2303.  move.l #emptyend,Samp0end
  2304. playbeat:
  2305. notoffendsamp1:
  2306.  
  2307.  cmp.l Samp1end,a1
  2308.  blt.s notoffendsamp2
  2309.  move.l #empty,a1
  2310.  move.l #emptyend,Samp1end
  2311. notoffendsamp2:
  2312.  
  2313.  move.l a0,pos1
  2314.  move.l a1,pos2
  2315.  
  2316. ******************* Other two channels
  2317.  
  2318.  move.l pos3,a0
  2319.  move.l pos4,a1
  2320.  
  2321.  move.l #tab,a2
  2322.  adda.w audpos3,a2
  2323.  
  2324.  move.l Aupt2,a3
  2325.  move.l a3,$dff0d0
  2326.  move.l Auback2,Aupt2
  2327.  move.l a3,Auback2
  2328.  
  2329.  moveq #0,d0
  2330.  moveq #0,d1
  2331.  moveq #0,d2
  2332.  moveq #0,d3
  2333.  moveq #0,d4
  2334.  moveq #0,d5
  2335.  move.w #49,d7
  2336. loop3:
  2337.  move.l (a0)+,d0
  2338.  move.b (a1)+,d1
  2339.  move.b (a1)+,d2
  2340.  move.b (a1)+,d3
  2341.  move.b (a1)+,d4
  2342.  move.b (a2,d3.w),d5
  2343.  swap d5
  2344.  move.b (a2,d1.w),d5
  2345.  asl.l #8,d5
  2346.  move.b (a2,d2.w),d5
  2347.  swap d5
  2348.  move.b (a2,d4.w),d5
  2349.  add.l d5,d0
  2350.  move.l d0,(a3)+
  2351.  dbra d7,loop3
  2352.  
  2353.  move.l pos3,a0
  2354.  move.l pos4,a1
  2355.  
  2356.  move.l Aupt3,a3
  2357.  move.l a3,$dff0c0
  2358.  move.l Auback3,Aupt3
  2359.  move.l a3,Auback3
  2360.  
  2361.  move.l #tab,a2
  2362.  adda.w audpos4,a2
  2363.  moveq #0,d0
  2364.  moveq #0,d1
  2365.  moveq #0,d2
  2366.  moveq #0,d3
  2367.  moveq #0,d4
  2368.  moveq #0,d5
  2369.  move.w #49,d7
  2370. loop4:
  2371.  move.l (a0)+,d0
  2372.  move.b (a1)+,d1
  2373.  move.b (a1)+,d2
  2374.  move.b (a1)+,d3
  2375.  move.b (a1)+,d4
  2376.  move.b (a2,d3.w),d5
  2377.  swap d5
  2378.  move.b (a2,d1.w),d5
  2379.  asl.l #8,d5
  2380.  move.b (a2,d2.w),d5
  2381.  swap d5
  2382.  move.b (a2,d4.w),d5
  2383.  add.l d5,d0
  2384.  move.l d0,(a3)+
  2385.  dbra d7,loop4
  2386.  
  2387.  cmp.l Samp2end,a0
  2388.  blt.s notoffendsamp3
  2389.  move.l #empty,a0
  2390.  move.l #emptyend,Samp2end
  2391. notoffendsamp3:
  2392.  
  2393.  cmp.l Samp3end,a1
  2394.  blt.s notoffendsamp4
  2395.  move.l #empty,a1
  2396.  move.l #emptyend,Samp3end
  2397. notoffendsamp4:
  2398.  
  2399.  move.l a0,pos3
  2400.  move.l a1,pos4
  2401.  
  2402.  
  2403.  movem.l (a7)+,d0-d7/a0-a6
  2404.  
  2405.  rte
  2406.  
  2407. backbeat: dc.w 0
  2408.  
  2409. Samp0end: dc.l emptyend
  2410. Samp1end: dc.l emptyend
  2411. Samp2end: dc.l emptyend
  2412. Samp3end: dc.l emptyend
  2413.  
  2414. Aupt0: dc.l null
  2415. Auback0: dc.l null+500
  2416. Aupt2: dc.l null3
  2417. Auback2: dc.l null3+500
  2418. Aupt3: dc.l null4
  2419. Auback3: dc.l null4+500
  2420. Aupt1: dc.l null2
  2421. Auback1: dc.l null2+500
  2422.  
  2423. empty: ds.l 100
  2424. emptyend:
  2425.  
  2426. **************************************
  2427. * I want a routine to calculate all the
  2428. * info needed for the sound player to
  2429. * work, given say position of noise, volume
  2430. * and sample number.
  2431.  
  2432. Samplenum: dc.w 0
  2433. Noisex: dc.w 0
  2434. Noisez: dc.w 0
  2435. Noisevol: dc.w 0
  2436. chanpick: dc.w 0
  2437.  
  2438. MakeSomeNoise:
  2439.  
  2440.  move.w Noisex,d1
  2441.  muls d1,d1
  2442.  move.w Noisez,d2
  2443.  muls d2,d2
  2444.  move.w #64,d3
  2445.  moveq #1,d0
  2446.  add.l d1,d2
  2447.  beq pastcalc
  2448.  
  2449.  move.w #31,d0
  2450. .findhigh
  2451.  btst d0,d2
  2452.  bne .foundhigh
  2453.  dbra d0,.findhigh
  2454. .foundhigh
  2455.  asr.w #1,d0
  2456.  clr.l d3
  2457.  bset d0,d3
  2458.  move.l d3,d0
  2459.  
  2460.  move.w d0,d3
  2461.  muls d3,d3    ; x*x
  2462.  sub.l d2,d3    ; x*x-a
  2463.  asr.l #1,d3    ; (x*x-a)/2
  2464.  divs d0,d3    ; (x*x-a)/2x
  2465.  sub.w d3,d0    ; second approx
  2466.  bgt .stillnot0
  2467.  move.w #1,d0
  2468. .stillnot0
  2469.  
  2470.  move.w d0,d3
  2471.  muls d3,d3
  2472.  sub.l d2,d3
  2473.  asr.l #1,d3
  2474.  divs d0,d3
  2475.  sub.w d3,d0    ; second approx
  2476.  bgt .stillnot02
  2477.  move.w #1,d0
  2478. .stillnot02
  2479.  
  2480.  move.w #64,d3
  2481.  muls Noisevol,d3
  2482.  divs d0,d3
  2483.  
  2484.  cmp.w #64,d3
  2485.  ble.s notooloud
  2486.  move.w #64,d3
  2487. notooloud:
  2488.  
  2489. pastcalc:
  2490.  
  2491.     ; d3 contains volume of noise.
  2492.     
  2493.  move.w d3,d4
  2494.  
  2495.  move.w d3,d2
  2496.  muls Noisex,d2
  2497.  divs d0,d2
  2498.  
  2499.  bgt quietleft
  2500.  add.w d2,d4
  2501.  bra donequiet
  2502. quietleft:
  2503.  sub.w d2,d3
  2504. donequiet:
  2505.  
  2506. ; d3=leftvol?
  2507. ; d4=rightvol?
  2508.  
  2509.  neg.w d3
  2510.  add.w #64,d3
  2511.  neg.w d4
  2512.  add.w #64,d4
  2513.  
  2514.  move.l #SampleList,a3
  2515.  
  2516.  tst.b chanpick
  2517.  beq.s chan0
  2518.  cmp.b #1,chan0
  2519.  beq.s chan1
  2520.  cmp.b #2,chanpick
  2521.  beq chan2
  2522.  
  2523.  move.w Samplenum,d0
  2524.  move.l (a3,d0.w*8),a1
  2525.  move.l 4(a3,d0.w*8),a2
  2526.  
  2527.  tst.b notifplaying
  2528.  beq.s .play
  2529.  cmp.l Samp3end,a2
  2530.  bne.s .play
  2531.  rts
  2532. .play
  2533.  
  2534.  move.b d3,audpos3
  2535.  move.b d4,audpos4
  2536.  move.l a1,pos4
  2537.  move.l a2,Samp3end
  2538.  
  2539.  rts
  2540.  
  2541. chan0: 
  2542.  move.w Samplenum,d0
  2543.  move.l (a3,d0.w*8),a1
  2544.  move.l 4(a3,d0.w*8),a2
  2545.  tst.b notifplaying
  2546.  beq.s .play
  2547.  cmp.l Samp0end,a2
  2548.  bne.s .play
  2549.  rts
  2550. .play
  2551.  move.l a1,pos1
  2552.  move.l a2,Samp0end
  2553.  
  2554.  rts
  2555.  
  2556. chan1:
  2557.  
  2558.  move.w Samplenum,d0
  2559.  move.l (a3,d0.w*8),a1
  2560.  move.l 4(a3,d0.w*8),a2
  2561.  tst.b notifplaying
  2562.  beq.s .play
  2563.  cmp.l Samp1end,a2
  2564.  bne.s .play
  2565.  rts
  2566. .play
  2567.  move.b d3,audpos1
  2568.  move.b d4,audpos2
  2569.  move.l a1,pos2
  2570.  move.l a2,Samp1end
  2571.  
  2572.  rts
  2573.  
  2574. chan2: 
  2575.  move.w Samplenum,d0
  2576.  move.l (a3,d0.w*8),a1
  2577.  move.l 4(a3,d0.w*8),a2
  2578.  tst.b notifplaying
  2579.  beq.s .play
  2580.  cmp.l Samp1end,a2
  2581.  bne.s .play
  2582.  rts
  2583. .play
  2584.  move.l a1,pos3
  2585.  move.l a2,Samp2end
  2586.  
  2587.  rts
  2588.  
  2589. SampleList
  2590.  dc.l Scream,EndScream
  2591.  dc.l Shoot,EndShoot
  2592.  dc.l Munch,EndMunch
  2593.  dc.l PooGun,EndPooGun
  2594.  dc.l Collect,EndCollect
  2595.  
  2596. saveinters:  
  2597.  dc.w 0
  2598.  
  2599. z: dc.w 10
  2600.  
  2601. notifplaying:
  2602.  dc.w 0
  2603.  
  2604. audpos1: dc.w 0
  2605. audpos2: dc.w 0
  2606. audpos3: dc.w 0
  2607. audpos4: dc.w 0
  2608.  
  2609. pos: dc.l 0
  2610.  
  2611. pos1: dc.l Scream
  2612. pos2: dc.l Scream
  2613. pos3: dc.l empty
  2614. pos4: dc.l empty
  2615.  
  2616. Scream: incbin "ab3:sounds/Scream"
  2617.  ds.w 100
  2618. EndScream:
  2619. bass: incbin "ab3:sounds/backbass+drum"
  2620. bassend:
  2621. Shoot: incbin "ab3:sounds/fire!"
  2622. EndShoot:
  2623. Munch: incbin "ab3:sounds/munch"
  2624. EndMunch:
  2625. PooGun: incbin "ab3:sounds/poogun"
  2626. EndPooGun:
  2627. Collect: incbin "ab3:sounds/collect"
  2628. EndCollect:
  2629.  
  2630. numtodo dc.w 0
  2631.  
  2632. npt: dc.w 0
  2633.  
  2634. tab:
  2635. val SET 0
  2636.  REPT 128
  2637.  dc.b val
  2638. val SET val+1
  2639.  ENDR
  2640. val SET -128
  2641.  REPT 128
  2642.  dc.b val
  2643. val SET val+1
  2644.  ENDR 
  2645.  
  2646.  ds.b 256*64
  2647.  
  2648.  
  2649. test: dc.l 0
  2650.  ds.l 30
  2651.  
  2652.  even
  2653. scalecols: incbin "ab3:level1/bytepixpalscaled"
  2654.  even
  2655. floorscalecols: incbin "ab3:level1/floorpalscaled"
  2656.  even
  2657. walltiles:
  2658.  incbin "ab3:level1/bytepixfile"
  2659.  even
  2660. floortile:
  2661.  incbin "ab3:level1/floortile" 
  2662.  even
  2663. wallrouts:
  2664.  incbin "2x2WallDraw" 
  2665. ObjDrawRouts:
  2666.  incbin "ObjDrawRoutstst"
  2667. BackPicture:
  2668.  incbin "backfile"
  2669. EndBackPicture:
  2670.  
  2671. drawpt: dc.l colbars2
  2672. olddrawpt: dc.l colbars
  2673. frompt: dc.l 0 
  2674.  
  2675. SineTable:
  2676.  incbin "bigsine"
  2677.  
  2678. angpos: dc.w 0
  2679. angspd: dc.w 0
  2680. wallyoff: dc.w 0
  2681. flooryoff: dc.w 0
  2682. xoff: dc.l 0
  2683. yoff: dc.l 0
  2684. yvel: dc.l 0
  2685. zoff: dc.l 0
  2686. tyoff: dc.l 0
  2687.  
  2688. liftanimtab:
  2689.  
  2690. endliftanimtab:
  2691.  
  2692. brightanimtab:
  2693.  dcb.w 200,20
  2694.  dc.w 5
  2695.  dc.w 10,20
  2696.  dc.w 5
  2697.  dcb.w 30,20
  2698.  dc.w 7,10,10,5,10,0,5,6,5,6,5,6,5,6,0
  2699.  dcb.w 40,0
  2700.  dc.w 1,2,3,2,3,2,3,2,3,2,3,2,3,0
  2701.  dcb.w 300,0
  2702.  dc.w 1,0,1,0,2,2,2,5,5,5,5,5,5,5,5,5,6,10
  2703.  dc.w -1
  2704.  
  2705. Roompt: dc.l 0
  2706. OldRoompt: dc.l 0
  2707.  
  2708. *****************************************************************
  2709.  *
  2710.  include "AB3:level1/Level1.s"
  2711.  *
  2712. *****************************************************************
  2713.  
  2714.  
  2715. wallpt: dc.l 0
  2716. floorpt: dc.l 0
  2717.  
  2718. Rotated:
  2719.  ds.l 800 
  2720. ObjRotated:
  2721.  ds.l 800
  2722.  
  2723. OnScreen:
  2724.  ds.l 800 
  2725.  
  2726. startwait: dc.w 0
  2727. endwait: dc.w 0
  2728.  
  2729. Faces: incbin "faces2raw"
  2730.  
  2731.  SECTION ffff,CODE_C
  2732.  
  2733. null: ds.w 500
  2734. null2: ds.w 500
  2735. null3: ds.w 500
  2736. null4: ds.w 500
  2737.  
  2738. bigfield:                    ; Start of our copper list.
  2739.  
  2740.  dc.w intreq,$8011
  2741.  dc.w $1fc,$3
  2742.  dc.w diwstart
  2743. winstart: dc.w $2cb1
  2744.  dc.w diwstop
  2745. winstop: dc.w $2c91
  2746.  dc.w ddfstart
  2747. fetchstart: dc.w $48
  2748.  dc.w ddfstop
  2749. fetchstop: dc.w $88
  2750.  
  2751.  dc.w bplcon0,$7201
  2752.  dc.w bplcon1
  2753. smoff:
  2754.  dc.w $0
  2755.  
  2756.  dc.w col0,0
  2757.  
  2758.  dc.w $108
  2759. modulo: dc.w -24
  2760.  dc.w $10a,-24
  2761.  
  2762.  dc.w bpl1pth
  2763. pl1h
  2764.  dc.w 0
  2765.  
  2766.  dc.w bpl1ptl
  2767. pl1l
  2768.  dc.w 0
  2769.  
  2770.  dc.w bpl2pth
  2771. pl2h
  2772.  dc.w 0
  2773.  
  2774.  dc.w bpl2ptl
  2775. pl2l
  2776.  dc.w 0
  2777.  
  2778.  dc.w bpl3pth
  2779. pl3h
  2780.  dc.w 0
  2781.  
  2782.  dc.w bpl3ptl
  2783. pl3l
  2784.  dc.w 0
  2785.  
  2786.  dc.w bpl4pth
  2787. pl4h
  2788.  dc.w 0
  2789.  
  2790.  dc.w bpl4ptl
  2791. pl4l
  2792.  dc.w 0
  2793.  
  2794.  dc.w bpl5pth
  2795. pl5h
  2796.  dc.w 0
  2797.  
  2798.  dc.w bpl5ptl
  2799. pl5l
  2800.  dc.w 0
  2801.  
  2802.  dc.w bpl6pth
  2803. pl6h
  2804.  dc.w 0
  2805.  
  2806.  dc.w bpl6ptl
  2807. pl6l
  2808.  dc.w 0
  2809.  
  2810.  dc.w bpl7pth
  2811. pl7h
  2812.  dc.w 0
  2813.  
  2814.  dc.w bpl7ptl
  2815. pl7l
  2816.  dc.w 0
  2817.  
  2818.  
  2819.  dc.w $1001,$ff00
  2820.  dc.w intreq,$11
  2821. yposcop:
  2822.  dc.w $2a11,$fffe
  2823.  dc.w $8a,0
  2824.  
  2825. colbars:
  2826. val SET $2a
  2827.  dcb.l 104*82,$1fe0000
  2828.  dc.w $106,$c40
  2829.  
  2830.  dc.w $80
  2831. pch1:
  2832.  dc.w 0
  2833.  dc.w $82
  2834. pcl1:
  2835.  dc.w 0 
  2836.  dc.w $88,0
  2837.  
  2838.  dc.w $ffff,$fffe       ; End copper list.
  2839.  
  2840. old dc.l 0
  2841.  
  2842. colbars2:
  2843. val SET $2a
  2844.  dcb.l 104*82,$1fe0000
  2845.  
  2846.  dc.w $106,$c40
  2847.  
  2848.  dc.w $80
  2849. pch2:
  2850.  dc.w 0
  2851.  dc.w $82
  2852. pcl2:
  2853.  dc.w 0
  2854.  
  2855.  dc.w $88,0
  2856.  
  2857.  dc.w $ffff,$fffe       ; End copper list.
  2858.  
  2859.  dc.w $0
  2860.  
  2861. PanelCop:
  2862.  
  2863.  dc.w bplcon0,0
  2864.  
  2865.  dc.w $106,$c40
  2866.  dc.w $10c,0
  2867.  dc.w $10e,0
  2868.  
  2869.  incbin "Panelcopcols"
  2870.  
  2871.  dc.w $108,0
  2872.  dc.w $10a,0
  2873.  
  2874.  dc.w bpl1pth
  2875. p1h
  2876.  dc.w 0
  2877.  
  2878.  dc.w bpl1ptl
  2879. p1l
  2880.  dc.w 0
  2881.  
  2882.  dc.w bpl2pth
  2883. p2h
  2884.  dc.w 0
  2885.  
  2886.  dc.w bpl2ptl
  2887. p2l
  2888.  dc.w 0
  2889.  
  2890.  dc.w bpl3pth
  2891. p3h
  2892.  dc.w 0
  2893.  
  2894.  dc.w bpl3ptl
  2895. p3l
  2896.  dc.w 0
  2897.  
  2898.  dc.w bpl4pth
  2899. p4h
  2900.  dc.w 0
  2901.  dc.w bpl4ptl
  2902. p4l
  2903.  dc.w 0
  2904.  
  2905.  dc.w $80
  2906. och:
  2907.  dc.w 0
  2908.  dc.w $82
  2909. ocl:
  2910.  dc.w 0
  2911.  
  2912.  dc.w $cf01,$ff00
  2913.  dc.w bplcon0,$4200
  2914.  
  2915.  dc.w $f801,$ff00
  2916.  dc.w col1,$50
  2917.  dc.w $f901,$ff00
  2918.  dc.w col1,$90
  2919.  dc.w $fa01,$ff00
  2920.  dc.w col1,$f0
  2921.  dc.w $fb01,$ff00
  2922.  dc.w col1,$f0
  2923.  dc.w $fc01,$ff00
  2924.  dc.w col1,$90
  2925.  dc.w $fd01,$ff00
  2926.  dc.w col1,$50
  2927.  
  2928.  dc.w $fe01,$ff00
  2929.  dc.w col1,$fff
  2930.  
  2931.  dc.w $ffdf,$fffe
  2932.  dc.w $a01,$ff00
  2933.  dc.w bplcon0,$0
  2934.  incbin "faces2cols"
  2935.  dc.w bpl1pth
  2936. f1h
  2937.  dc.w 0
  2938.  
  2939.  dc.w bpl1ptl
  2940. f1l
  2941.  dc.w 0
  2942.  
  2943.  dc.w bpl2pth
  2944. f2h
  2945.  dc.w 0
  2946.  
  2947.  dc.w bpl2ptl
  2948. f2l
  2949.  dc.w 0
  2950.  
  2951.  dc.w bpl3pth
  2952. f3h
  2953.  dc.w 0
  2954.  
  2955.  dc.w bpl3ptl
  2956. f3l
  2957.  dc.w 0
  2958.  
  2959.  dc.w bpl4pth
  2960. f4h
  2961.  dc.w 0
  2962.  dc.w bpl4ptl
  2963. f4l
  2964.  dc.w 0
  2965.  
  2966.  dc.w bpl5pth
  2967. f5h
  2968.  dc.w 0
  2969.  dc.w bpl5ptl
  2970. f5l
  2971.  dc.w 0
  2972.  
  2973.  dc.w $0c01,$ff00
  2974.  dc.w bplcon0,$5200
  2975.   
  2976.  dc.w $ffff,$fffe
  2977.  
  2978.  cnop 0,64
  2979. FacePlace:
  2980.  ds.l 6*32*5
  2981.  
  2982.  
  2983. ********************************************
  2984. * Stuff you don't have to worry about yet. *
  2985. ********************************************
  2986.  
  2987. closeeverything:
  2988.  move.l old,$dff080     ; Restore old copper list.
  2989.  move.l old,d0
  2990.  move.w d0,ocl
  2991.  swap d0
  2992.  move.w d0,och
  2993.  move.w #$8020,dmacon(a6)
  2994.  move.w #$f,dmacon(a6)
  2995.  move.l saveit,$6c
  2996.  move.w saveinters,d0
  2997.  or.w #$c000,d0
  2998.  move.w d0,intena(a6)
  2999.  clr.w $dff0a8
  3000.  clr.w $dff0b8
  3001.  clr.w $dff0c8
  3002.  clr.w $dff0d8
  3003.  rte
  3004.  
  3005. stuff:
  3006.  move.l 4.w,a6          ; Get EXECBASE.
  3007.  lea gfxname(PC),a1     ; Point to 'graphics.library' string.
  3008.  moveq #0,d0            ; Ignore version number.
  3009.  jsr OpenLib(a6)        ; Open the library.
  3010.  move.l d0,a1           ; Store library address.
  3011.  move.l 38(a1),old      ; Store workbench copper address.
  3012.  move.l 4.w,a6          ; Get EXECBASE again.    
  3013.  jsr CloseLib(a6)       ; Close the library.
  3014.  
  3015.  jmp endstuff
  3016.  
  3017. gfxname dc.b "graphics.library",0
  3018.  
  3019.  cnop 0,64
  3020.  
  3021. Panel:
  3022.  incbin "PanelRaw"
  3023.  
  3024. scrntab:
  3025.  ds.b 16
  3026. val SET 32
  3027.  REPT 96
  3028.  dc.b val,val,val
  3029. val SET val+1
  3030.  ENDR
  3031.  ds.b 16
  3032.  
  3033.  cnop 0,64
  3034. scrn:
  3035.  
  3036.  dcb.l 8,$33333333
  3037.  dc.l 0
  3038.  dc.l 0
  3039.  
  3040.  dcb.l 8,$0f0f0f0f
  3041.  dc.l 0
  3042.  dc.l 0
  3043.  
  3044.  dcb.l 8,$00ff00ff
  3045.  dc.l 0
  3046.  dc.l 0
  3047.  
  3048.  dcb.l 8,$0000ffff
  3049.  dc.l 0
  3050.  dc.l 0
  3051.  
  3052.  dc.l 0,-1,0,-1,0,-1,0,-1
  3053.  dc.l 0
  3054.  dc.l 0
  3055.  
  3056.  dc.l -1,-1,0,0,-1,-1,0,0
  3057.  dc.l 0
  3058.  dc.l 0
  3059.  
  3060.  dc.l 0,0,-1,-1,-1,-1,-1,-1
  3061.  dc.l 0
  3062.  dc.l 0
  3063.  
  3064.  
  3065.  
  3066.